package br.unirio.octopus.visao.acoes;

import java.util.List;
import java.util.Set;

import org.apache.struts2.interceptor.validation.SkipValidation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import br.unirio.octopus.dominio.GrupoUsuarios;
import br.unirio.octopus.dominio.Palpite;
import br.unirio.octopus.dominio.Usuario;
import br.unirio.octopus.servicos.IServicoDePalpite;
import br.unirio.octopus.servicos.IServicoDeUsuario;
import br.unirio.octopus.util.LoggerDaAplicacao;

@Controller
public class GrupoAction extends AbstractAction {

	@Autowired
	private IServicoDeUsuario servicoDeUsuario;

	private IServicoDePalpite servicoDePalpite;
	private Set<GrupoUsuarios> gruposDoUsuario;
	private List<Palpite> palpitesDoUsuario;
	private Usuario usuario;
	private GrupoUsuarios grupo;
	private String senhaAntigaUsuario;
	private String nome;
	private String nomeDoGrupo;
	private String nomeUsuario;
	
	private String loginUsuario;

	private String mensagemDeSucesso;
	private String mensagemDeFalha;
	
	private int colocacaoUsuarioNoGrupo;

	@SkipValidation
	public String preparaPaginaInicialDeGruposDoUsuario() {
		LoggerDaAplicacao
				.getLoggerDaAplicacao()
				.log("Entrando no metodo preparaPaginaInicialDeGruposDoUsuario() da action GrupoAction");
		loginUsuario = getLoginDoUsuarioAutenticado();
		usuario = servicoDeUsuario.obterUsuarioEGruposAPartirDeLogin(getLoginDoUsuarioAutenticado());
		
		return INPUT;
	}

	@SkipValidation
	public String inserirNovoUsuarioAoGrupo() {
		String loginUsuario = getLoginDoUsuarioAutenticado();
		if(servicoDeUsuario.verificarSeGrupoExistePeloNome(grupo.getNome())){
			servicoDeUsuario.adicionarUsuarioAGrupo(grupo.getNome(), loginUsuario);
			mensagemDeSucesso = getText("usuario.ingressarEmGrupo.sucesso");
			return preparaPaginaInicialDeGruposDoUsuario();

		}else{
			mensagemDeFalha = getText("usuario.cadastrarGrupo.gruponaoExiste");
			return prepararPaginaIngressarEmGrupo();
		}
		
		
	}

	@SkipValidation
	public String excluirUsuarioDoGrupo(){
		
		servicoDeUsuario.removerUsuarioDoGrupo(nome, nomeDoGrupo);
		mensagemDeSucesso = getText("grupo.removerUsuario.sucesso");
		return prepararPaginaDeGrupo();
		
	}
	
	public String inserirNovoGrupo() {
		String nomeGrupo = grupo.getNome();
		if (servicoDeUsuario.verificarSeGrupoExistePeloNome(nomeGrupo)) {
			mensagemDeSucesso = getText("grupo.cadastrar.grupoexistente");
			return preparaPaginaInicialDeGruposDoUsuario();
		}
		String loginDoUsuario = getLoginDoUsuarioAutenticado();
		servicoDeUsuario.criarNovoGrupo(nomeGrupo, loginDoUsuario);
		mensagemDeSucesso = "Grupo criado com sucesso!";

		return preparaPaginaInicialDeGruposDoUsuario();
	}

	@SkipValidation
	public String prepararPaginaCriarNovoGrupo() {

		return INPUT;
	}
	
	@SkipValidation
	public String sairDoGrupo() {

		String loginDoUsuario = getLoginDoUsuarioAutenticado();
		String nomeDoGrupo = nome;
		servicoDeUsuario.sairDoGrupo(nomeDoGrupo, loginDoUsuario);
		mensagemDeSucesso = getText("usuario.sairDoGrupo.sucesso");
		return preparaPaginaInicialDeGruposDoUsuario();
	}
	

	@SkipValidation
	public String excluirGrupo() {

		String nomeDoGrupo = nome;
		servicoDeUsuario.excluirGrupo(nomeDoGrupo);
		mensagemDeSucesso = getText("usuario.excluirGrupo.sucesso");
		return preparaPaginaInicialDeGruposDoUsuario();
	}
	
	@SkipValidation
	public String prepararPaginaDeGrupo() {

		grupo = servicoDeUsuario.obterGrupoESeusMembros(nome);
		nomeDoGrupo = nome;
		colocacaoUsuarioNoGrupo = servicoDeUsuario.obterColocacaoDoUsuarioNoGrupo(getLoginDoUsuarioAutenticado(), nome);

		loginUsuario = getLoginDoUsuarioAutenticado();
		
		
		return INPUT;
	}

	
//	@SkipValidation
//	public String prepararPaginaListarGrupos() {
//
//		return INPUT;
//	}

	@SkipValidation
	public String prepararPaginaIngressarEmGrupo() {

		return INPUT;
	}

	public Set<GrupoUsuarios> getGruposDoUsuario() {
		return gruposDoUsuario;
	}

	public void setGruposDoUsuario(Set<GrupoUsuarios> gruposDoUsuario) {
		this.gruposDoUsuario = gruposDoUsuario;
	}

	public List<Palpite> getPalpitesDoUsuario() {
		return palpitesDoUsuario;
	}

	public void setPalpitesDoUsuario(List<Palpite> palpitesDoUsuario) {
		this.palpitesDoUsuario = palpitesDoUsuario;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public GrupoUsuarios getGrupo() {
		return grupo;
	}

	public void setGrupo(GrupoUsuarios grupo) {
		this.grupo = grupo;
	}

	public String getMensagemDeSucesso() {
		return mensagemDeSucesso;
	}

	public void setMensagemDeSucesso(String mensagemDeSucesso) {
		this.mensagemDeSucesso = mensagemDeSucesso;
	}

	public String getMensagemDeFalha() {
		return mensagemDeFalha;
	}

	public void setMensagemDeFalha(String mensagemDeFalha) {
		this.mensagemDeFalha = mensagemDeFalha;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getLoginUsuario() {
		return loginUsuario;
	}

	public void setLoginUsuario(String loginUsuario) {
		this.loginUsuario = loginUsuario;
	}

	public String getNomeUsuario() {
		return nomeUsuario;
	}

	public void setNomeUsuario(String nomeUsuario) {
		this.nomeUsuario = nomeUsuario;
	}

	public String getNomeDoGrupo() {
		return nomeDoGrupo;
	}

	public void setNomeDoGrupo(String nomeDoGrupo) {
		this.nomeDoGrupo = nomeDoGrupo;
	}

	public int getColocacaoUsuarioNoGrupo() {
		return colocacaoUsuarioNoGrupo;
	}

	public void setColocacaoUsuarioNoGrupo(int colocacaoUsuarioNoGrupo) {
		this.colocacaoUsuarioNoGrupo = colocacaoUsuarioNoGrupo;
	}
}
